package com.example.administrator.maizuofilm.activitymain;

import android.os.Bundle;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentTransaction;
import android.util.Log;
import android.view.Menu;
import android.widget.FrameLayout;
import android.widget.RadioButton;
import android.widget.RadioGroup;

import com.baidu.location.BDLocation;
import com.baidu.location.BDLocationListener;
import com.baidu.location.LocationClient;
import com.baidu.location.LocationClientOption;
import com.baidu.location.Poi;
import com.baidu.mapapi.SDKInitializer;
import com.example.administrator.maizuofilm.BaseActivity;
import com.example.administrator.maizuofilm.R;
import com.example.administrator.maizuofilm.card.activity.CardFragment;
import com.example.administrator.maizuofilm.cinema.fragment.CinemaFragment;
import com.example.administrator.maizuofilm.main.fragment.activity.ActiveFragment;
import com.example.administrator.maizuofilm.mine.fragment.MineFragment;
import com.example.administrator.maizuofilm.movie.fragment.MovieFragment;

import java.util.List;

import butterknife.ButterKnife;
import butterknife.InjectView;

public class MainActivity extends BaseActivity implements MainContract.view {
    public LocationClient mLocationClient = null;
    public BDLocationListener myListener = new MyLocationListener();
    private static final int MOVIE = 0;
    private static final int CINEMA = 1;
    private static final int CARD = 2;
    private static final int ACTIVE = 3;
    private static final int MINE = 4;
    @InjectView(R.id.framelayout)
    FrameLayout framelayout;
    @InjectView(R.id.radio_movie)
    RadioButton radioMovie;
    @InjectView(R.id.radio_cinema)
    RadioButton radioCinema;
    @InjectView(R.id.radio_card)
    RadioButton radioCard;
    @InjectView(R.id.radio_active)
    RadioButton radioActive;
    @InjectView(R.id.radio_mine)
    RadioButton radioMine;
    @InjectView(R.id.radiogroup)
    RadioGroup radiogroup;
    private FragmentManager mManager;
    private MovieFragment mMovieFragment;
    private CinemaFragment mCienamFragment;
    private CardFragment mCardFragment;
    private ActiveFragment mActiveFragment;
    private MineFragment mMineFragment;
    public static String add;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        SDKInitializer.initialize(getApplicationContext());
        setContentView(R.layout.activity_main);
        mLocationClient = new LocationClient(getApplicationContext());     //声明LocationClient类
        mLocationClient.registerLocationListener(myListener);    //注册监听函数
        initLocation();
        ButterKnife.inject(this);
        mManager = getSupportFragmentManager();
        setSelection(R.id.radio_movie);
        radiogroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(RadioGroup group, int checkedId) {
                switch (checkedId) {
                    case R.id.radio_movie:
                        setSelection(checkedId);
                        break;
                    case R.id.radio_cinema:
                        setSelection(checkedId);
                        break;
                    case R.id.radio_card:
                        setSelection(checkedId);
                        break;
                    case R.id.radio_active:
                        setSelection(checkedId);
                        break;
                    case R.id.radio_mine:
                        setSelection(checkedId);
                        break;
                }
            }
        });
    }

    @Override
    protected void onResume() {
        super.onResume();
        mLocationClient.start();//开始定位
    }

    //设置fragment选择
    private void setSelection(int index) {
        FragmentTransaction ft = mManager.beginTransaction();
        hideFragments(ft);
        switch (index) {
            case R.id.radio_movie:
                if (mMovieFragment == null) {
                    mMovieFragment = new MovieFragment();
                    mMovieFragment.setHasOptionsMenu(true);
                    ft.add(R.id.framelayout, mMovieFragment);
                } else {
                    ft.show(mMovieFragment);
                }
                break;
            case R.id.radio_cinema:
                if (mCienamFragment == null) {
                    mCienamFragment = new CinemaFragment();
                    ft.add(R.id.framelayout, mCienamFragment);
                } else {
                    ft.show(mCienamFragment);
                }
                break;
            case R.id.radio_card:
                if (mCardFragment == null) {
                    mCardFragment = new CardFragment();
                    ft.add(R.id.framelayout, mCardFragment);
                } else {
                    ft.show(mCardFragment);
                }
                break;
            case R.id.radio_active:
                if (mActiveFragment == null) {
                    mActiveFragment = new ActiveFragment();
                    ft.add(R.id.framelayout, mActiveFragment);
                } else {
                    ft.show(mActiveFragment);
                }
                break;
            case R.id.radio_mine:
                if (mMineFragment == null) {
                    mMineFragment = new MineFragment();
                    ft.add(R.id.framelayout, mMineFragment);
                } else {
                    ft.show(mMineFragment);
                }
                break;

        }
        ft.commit();
    }

    //隐藏Fragment
    private void hideFragments(FragmentTransaction ft) {
        // TODO Auto-generated method stub
        if (mMovieFragment != null) {
            ft.hide(mMovieFragment);
        }
        if (mCienamFragment != null) {
            ft.hide(mCienamFragment);
        }
        if (mCardFragment != null) {
            ft.hide(mCardFragment);
        }
        if (mActiveFragment != null) {
            ft.hide(mActiveFragment);
        }
        if (mMineFragment != null) {
            ft.hide(mMineFragment);
        }
    }

    //定位监听器
    public class MyLocationListener implements BDLocationListener {

        @Override
        public void onReceiveLocation(BDLocation location) {
            //Receive Location
            StringBuffer sb = new StringBuffer(256);
            sb.append("time : ");
            sb.append(location.getTime());
            sb.append("\nerror code : ");
            sb.append(location.getLocType());
            sb.append("\nlatitude : ");
            sb.append(location.getLatitude());
            sb.append("\nlontitude : ");
            sb.append(location.getLongitude());
            sb.append("\nradius : ");
            sb.append(location.getRadius());
            if (location.getLocType() == BDLocation.TypeGpsLocation) {// GPS定位结果
                sb.append("\nspeed : ");
                sb.append(location.getSpeed());// 单位：公里每小时
                sb.append("\nsatellite : ");
                sb.append(location.getSatelliteNumber());
                sb.append("\nheight : ");
                sb.append(location.getAltitude());// 单位：米
                sb.append("\ndirection : ");
                sb.append(location.getDirection());// 单位度
                sb.append("\naddr : ");
                sb.append(location.getAddrStr());
                add=location.getAddrStr();
                sb.append("\ndescribe : ");
                sb.append("gps定位成功");

            } else if (location.getLocType() == BDLocation.TypeNetWorkLocation) {// 网络定位结果
                sb.append("\naddr : ");
                sb.append(location.getAddrStr());
                //运营商信息
                sb.append("\noperationers : ");
                sb.append(location.getOperators());
                sb.append("\ndescribe : ");
                sb.append("网络定位成功");
            } else if (location.getLocType() == BDLocation.TypeOffLineLocation) {// 离线定位结果
                sb.append("\ndescribe : ");
                sb.append("离线定位成功，离线定位结果也是有效的");
            } else if (location.getLocType() == BDLocation.TypeServerError) {
                sb.append("\ndescribe : ");
                sb.append("服务端网络定位失败，可以反馈IMEI号和大体定位时间到loc-bugs@baidu.com，会有人追查原因");
            } else if (location.getLocType() == BDLocation.TypeNetWorkException) {
                sb.append("\ndescribe : ");
                sb.append("网络不同导致定位失败，请检查网络是否通畅");
            } else if (location.getLocType() == BDLocation.TypeCriteriaException) {
                sb.append("\ndescribe : ");
                sb.append("无法获取有效定位依据导致定位失败，一般是由于手机的原因，处于飞行模式下一般会造成这种结果，可以试着重启手机");
            }
            sb.append("\nlocationdescribe : ");
            sb.append(location.getLocationDescribe());// 位置语义化信息
            List<Poi> list = location.getPoiList();// POI数据
            if (list != null) {
                sb.append("\npoilist size = : ");
                sb.append(list.size());
                for (Poi p : list) {
                    sb.append("\npoi= : ");
                    sb.append(p.getId() + " " + p.getName() + " " + p.getRank());
                }
            }
            Log.i("BaiduLocationApiDem", sb.toString());
        }
    }

    //定位方式选择
    private void initLocation() {
        LocationClientOption option = new LocationClientOption();
        option.setLocationMode(LocationClientOption.LocationMode.Hight_Accuracy
        );//可选，默认高精度，设置定位模式，高精度，低功耗，仅设备
        option.setCoorType("bd09ll");//可选，默认gcj02，设置返回的定位结果坐标系
        int span = 1000;
//        option.setScanSpan(span);//可选，默认0，即仅定位一次，设置发起定位请求的间隔需要大于等于1000ms才是有效的
        option.setIsNeedAddress(true);//可选，设置是否需要地址信息，默认不需要
//        option.setOpenGps(true);//可选，默认false,设置是否使用gps
//        option.setLocationNotify(true);//可选，默认false，设置是否当gps有效时按照1S1次频率输出GPS结果
//        option.setIsNeedLocationDescribe(true);//可选，默认false，设置是否需要位置语义化结果，可以在BDLocation.getLocationDescribe里得到，结果类似于“在北京天安门附近”
//        option.setIsNeedLocationPoiList(true);//可选，默认false，设置是否需要POI结果，可以在BDLocation.getPoiList里得到
        option.setIgnoreKillProcess(false);//可选，默认true，定位SDK内部是一个SERVICE，并放到了独立进程，设置是否在stop的时候杀死这个进程，默认不杀死
        option.SetIgnoreCacheException(false);//可选，默认false，设置是否收集CRASH信息，默认收集
        option.setEnableSimulateGps(false);//可选，默认false，设置是否需要过滤gps仿真结果，默认需要
        mLocationClient.setLocOption(option);
    }

}
